iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
Python

探索 Python 世界:從語法基礎到圖像魔法系列 第 27

探索 Python 世界:從語法基礎到圖像魔法 Day27

  • 分享至 

  • xImage
  •  

OpenCV 影像辨識

AI 影像辨識

AI 影像辨識可以自動分析和理解視覺數據,應用於人臉識別、車牌辨識、物體檢測等多個領域。被廣泛用於安全監控、智能交通、醫療診斷等

辨識模型

OpenCV官方GitHub:
https://github.com/opencv/opencv/tree/4.x/data

人臉偵測模型:
https://github.com/opencv/opencv/blob/4.x/data/haarcascades/haarcascade_frontalface_default.xml

人臉馬賽克模型:
https://github.com/opencv/opencv/blob/4.x/data/haarcascades_cuda/haarcascade_frontalface_default.xml

行人偵測模型:
https://github.com/opencv/opencv/blob/4.x/data/haarcascades_cuda/haarcascade_fullbody.xml

人臉辨識

從OpenCV官方下 GitHub 下載模型後,將其與 Python 檔放在同一個資料夾中,並使用 cv2.CascadeClassifier 將欲使用模型載入預先訓練的分類器檔案的類別,在使用 detectMultiScale 掃描整個影像,使用不同的比例和位置偵測物體,並返回所有偵測到的人臉的邊界框

import cv2

img = cv2.imread('baby.jpg')  
img = cv2.resize(img, (300, 300))
cv2.imshow('Baby', img)

test = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 載入人臉識別分類器
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

# 偵測人臉
faces = face_cascade.detectMultiScale(test)    

# 抓取每個人臉,繪製方框
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 1)

cv2.imshow('facial recognition', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

範例:

https://ithelp.ithome.com.tw/upload/images/20241005/20168687vz6akEjQ2z.png

人臉馬賽克

使用 detectMultiScale 掃描整個影像,使用不同的比例和位置偵測物體,並返回所有偵測到的人臉的馬賽克

import cv2

img = cv2.imread('people.jpg')
# img = cv2.resize(img, (450, 450))
cv2.imshow('people', img)
test = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


# 載入人臉識別分類器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(test, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

# 對每個人臉進行馬賽克處理
for (x, y, w, h) in faces:
    face = img[y:y+h, x:x+w]
    face = cv2.resize(face, (w//10, h//10))
    face = cv2.resize(face, (w, h), interpolation=cv2.INTER_NEAREST)
    img[y:y+h, x:x+w] = face

cv2.imshow('Mosaic', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

範例:

https://ithelp.ithome.com.tw/upload/images/20241005/20168687GZbk5YXLdR.png

行人偵測

使用 detectMultiScale 掃描整個影像,使用不同的比例和位置偵測物體,並返回所有偵測到的行人的邊界框

import cv2

# 載入圖像
img = cv2.imread('man.jpg')

# 轉換為灰階圖像
test = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 載入全身檢測模型
body_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')

# 偵測圖像中的人物
bodies = body_cascade.detectMultiScale(test, 1.1, 3)

# 繪製偵測框
for (x, y, w, h) in bodies:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)

cv2.imshow('fullbody', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

範例:

https://ithelp.ithome.com.tw/upload/images/20241005/20168687o0Fzb47IGd.png

圖片來源:
https://pixabay.com/

參考資料:
https://steam.oxxostudio.tw/category/python/ai/ai-index.html


上一篇
探索 Python 世界:從語法基礎到圖像魔法 Day26
下一篇
探索 Python 世界:從語法基礎到圖像魔法 Day28
系列文
探索 Python 世界:從語法基礎到圖像魔法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言